#include <iostream>
#include <memory>
#include <sstream>
#include <json/json.h>
#include <string>

int main()
{
    Json::Value root;
    //填充内容
    root["姓名"] = "小明";
    root["性别"] = "男";
    root["成绩"].append(88.5);
    root["成绩"].append(99);
    root["成绩"].append(58);
    // 创建StreamWriter对象
    Json::StreamWriterBuilder swb;
    std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
    // 序列化
    std::stringstream ss;
    sw->write(root, &ss);
    std::cout << ss.str() << std::endl;

    // // 创建CharReader对象
    // Json::CharReaderBuilder crb;
    // std::unique_ptr<Json::CharReader> cr(crb.newCharReader());
    // std::string err;
    // //反序列化
    // std::string body(ss.str());
    // Json::Value ret;
    // bool is = cr->parse(body.c_str(), body.c_str()+body.size(), &ret, &err);

    // if (is == 0)
    // {
    //     std::cout << "parse error: " << err << std::endl;
    //     return 1;
    // }

    Json::Value ret;
    Json::CharReaderBuilder crb;
    std::string err;
    bool is = Json::parseFromStream(crb, ss, &ret, &err);
    if (is == 0)
    {
        std::cout << "parse error: " << err << std::endl;
        return 1;
    }

    std::cout << "姓名: " << ret["姓名"].asString() << std::endl;
    std::cout << "性别: " << ret["性别"].asString() << std::endl;
    std::cout << "成绩: ";
    for (int i = 0; i < ret["成绩"].size(); ++i)
    {
        std::cout << ret["成绩"][i].asDouble() << " ";
    }
    std::cout << std::endl;


    return 0;
}